#!/bin/bash

# 点击量统计系统测试脚本
# 用于演示Redis INCR计数和异步落库功能

echo "🚀 开始测试点击量统计系统..."
echo "=================================="

# 设置测试参数
SHORT_CODE="abc123"
BASE_URL="http://localhost:8080"
API_BASE="$BASE_URL/api/statistics"

echo "📊 测试短链接: $SHORT_CODE"
echo "🌐 服务地址: $BASE_URL"
echo ""

# 1. 查看初始统计状态
echo "1️⃣ 查看初始统计状态..."
curl -s "$API_BASE/overview/$SHORT_CODE" | jq '.'
echo ""

# 2. 模拟多次访问
echo "2️⃣ 模拟多次访问..."
for i in {1..10}; do
    echo "   访问 #$i"
    curl -s "$BASE_URL/$SHORT_CODE" > /dev/null
    sleep 0.1
done
echo ""

# 3. 查看访问后的统计
echo "3️⃣ 查看访问后的统计..."
curl -s "$API_BASE/overview/$SHORT_CODE" | jq '.'
echo ""

# 4. 查看总访问量
echo "4️⃣ 查看总访问量..."
curl -s "$API_BASE/total/$SHORT_CODE" | jq '.'
echo ""

# 5. 查看今日访问量
echo "5️⃣ 查看今日访问量..."
curl -s "$API_BASE/daily/$SHORT_CODE" | jq '.'
echo ""

# 6. 并发测试
echo "6️⃣ 并发测试 (10个并发请求)..."
for i in {1..10}; do
    curl -s "$BASE_URL/$SHORT_CODE" > /dev/null &
done
wait
echo "   并发访问完成"
echo ""

# 7. 查看并发后的统计
echo "7️⃣ 查看并发后的统计..."
curl -s "$API_BASE/overview/$SHORT_CODE" | jq '.'
echo ""

# 8. 测试Redis性能
echo "8️⃣ 测试Redis性能 (100次快速访问)..."
start_time=$(date +%s%N)
for i in {1..100}; do
    curl -s "$BASE_URL/$SHORT_CODE" > /dev/null
done
end_time=$(date +%s%N)
duration=$(( (end_time - start_time) / 1000000 ))
echo "   100次访问耗时: ${duration}ms"
echo "   平均响应时间: $((duration / 100))ms"
echo ""

# 9. 最终统计
echo "9️⃣ 最终统计结果..."
curl -s "$API_BASE/overview/$SHORT_CODE" | jq '.'
echo ""

echo "✅ 测试完成！"
echo "=================================="
echo "📈 性能特点:"
echo "   - 内存缓存: 即时响应 (~0.01ms)"
echo "   - Redis缓存: 快速持久化 (~0.1ms)"
echo "   - 异步落库: 后台处理，不影响响应"
echo ""
echo "🔧 监控建议:"
echo "   - 查看Redis内存使用: redis-cli info memory"
echo "   - 查看数据库连接: 检查连接池状态"
echo "   - 查看异步任务: 检查日志中的@Async执行情况"
